﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inventario_HardSoft.ADO;
using System.Windows.Forms;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_Reg_Usu
    {
        ConexionDataContext conexion;
        Contador conta;
        
        public Ctrl_Reg_Usu()
        {
            conexion = new ConexionDataContext();
            conta = new Contador();
        }

        internal bool IngresarUsuario(ADO.Usuario u,int esAsistente)
        {
            USUARIO user;
            //primero obtenemos el numero de id correspondiente
            var query2 = from emp in conexion.EMPRESA
                            where (emp.NOMBREEMPRESA == u.idempresa && emp.ELIMINADO == 0)
                            select emp;
            string idEmp = query2.Single().IDEMPRESA;
            //generamos el id para el usuario
            String numero = Convert.ToString(conta.getNumContador_IdUsuario());
            String numero2 = numero.Trim().PadLeft(5, '0');
            String iduser = "USU_" + numero2;
            //insertamos en la base de datos            
            if (esAsistente == 1)
            {
                user = new USUARIO
                {
                    IDUSUARIO = iduser,
                    IDEMPRESA = idEmp,
                    CODIGO_RRHH = u.codigorrhh,
                    USUARIO_WINDOWS = u.usuariowindows,
                    USUARIO_DBS = u.usuariodbs,
                    NOMBRE = u.nombre,
                    CORREO = u.correo,
                    OFICINA = u.oficina,
                    DEPARTAMENTO = u.departamento,
                    TELEFONO = u.telefono,
                    ANEXO = u.anexo,
                    CELULAR = u.celular,
                    RPC= u.rpc,
                    RPM = u.rpm,
                    NEXTEL = u.nextel,
                    USUARIO_SIST = u.ususistemas,
                    PASSWORD_SIST = u.passsistemas,
                    ELIMINADO = 0,
                    REPARADOR = 1,
                };
            }
            else if (esAsistente == 0)
            {
                user = new USUARIO
                {  
                    IDUSUARIO = iduser,
                    IDEMPRESA = idEmp,
                    CODIGO_RRHH = u.codigorrhh,
                    USUARIO_WINDOWS = u.usuariowindows,
                    USUARIO_DBS = u.usuariodbs,
                    NOMBRE = u.nombre,
                    CORREO = u.correo,
                    OFICINA = u.oficina,
                    DEPARTAMENTO = u.departamento,
                    TELEFONO = u.telefono,
                    ANEXO = u.anexo,
                    CELULAR = u.celular,
                    RPC = u.rpc,
                    RPM = u.rpm,
                    NEXTEL = u.nextel,
                    USUARIO_SIST = u.ususistemas,
                    PASSWORD_SIST = u.passsistemas,
                    ELIMINADO = 0,
                    REPARADOR = 0,
                };
            } 
            else  
            {
                user = new USUARIO
                {
                    IDUSUARIO = iduser,
                    IDEMPRESA = idEmp,
                    CODIGO_RRHH = u.codigorrhh,
                    USUARIO_WINDOWS = u.usuariowindows,
                    USUARIO_DBS = u.usuariodbs,
                    NOMBRE = u.nombre,
                    CORREO = u.correo,
                    OFICINA = u.oficina,
                    DEPARTAMENTO = u.departamento,
                    TELEFONO = u.telefono,
                    ANEXO = u.anexo,
                    CELULAR = u.celular,
                    RPC= u.rpc,
                    RPM = u.rpm,
                    NEXTEL = u.nextel,
                    USUARIO_SIST = u.ususistemas,
                    PASSWORD_SIST = u.passsistemas,
                    ELIMINADO = 0,
                    REPARADOR = 2,
                };
            }
       
            conexion.USUARIO.InsertOnSubmit(user);
            conexion.SubmitChanges();
            conexion.increm_ContadorUsuario();
            return true;
        }

        internal List<USUARIO> getList_Reg_Usu()
        {
            List<USUARIO> listusu = conexion.USUARIO.Where(x => x.ELIMINADO == 0).OrderBy(x => x.NOMBRE).ToList<USUARIO>();
            return listusu;
        }

        internal List<USUARIO> getList_Asistentes()
        {
            List<USUARIO> lisusu = new List<USUARIO>();
            var query = from rep in conexion.USUARIO
                        where (rep.ELIMINADO == 0)
                        select rep;
            lisusu = query.ToList<USUARIO>();
            return lisusu;
        }

        internal void get_MuestroEquipos_Cliente(DataGridView dg,string nomb_usu)
        {
            //asignado = 1
            List<EQUIPO> equipos = new List<EQUIPO>();
            string idUsuario = conexion.USUARIO.Single(x => x.NOMBRE == nomb_usu).IDUSUARIO;
            equipos = conexion.EQUIPO.Where(x => x.IDUSUARIO == idUsuario & x.ASIGNADO==1).ToList<EQUIPO>();
            foreach (EQUIPO e in equipos)
            {
                dg.Rows.Add(new object[] {e.IDEQUIPO, e.TIPOEQUIPO, e.MARCA, e.MODELO, e.SERIE });
            }            
        }

        internal string getIdUsu(string nomb_usu)
        {
            USUARIO usuario = conexion.USUARIO.Single(x => x.NOMBRE == nomb_usu);            
            return usuario.IDUSUARIO;
        }

        internal void detIdEqu()
        {            
          
        }

        internal List<USUARIO> getList_Reg_Terceros()
        {
            List<USUARIO> listusu = conexion.USUARIO.Where(x => x.ELIMINADO == 0 && x.REPARADOR==2).OrderBy(x=>x.NOMBRE).ToList<USUARIO>();
            return listusu;
        }

        internal DialogResult regProyecto(Proyecto eq)
        {
            DialogResult result = DialogResult.Cancel;

            try
            {
                string idUsu = conexion.USUARIO.Single(x=>x.NOMBRE == eq.tercero).IDUSUARIO; 

                int idpro = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDPROYECTO);
                String numero = Convert.ToString(idpro);
                String numero2 = numero.Trim().PadLeft(6, '0');
                String idproyecto = "PRO_" + numero2;    
 
                PROYECTO equi = new PROYECTO()
                {
                    IDUSUARIO =idUsu,
                    IDPROYECTO  = idproyecto,
                    COSTO  = eq.costo,
                    NOMBPROYECTO  = eq.nombproyecto, 
                    ESTADO  = eq.estado,
                    OBJETIVO  = eq.objetivo,
                    FECHAESTIMADATERMINO  =  eq.fechaestimadatermino,
                    FECHAINICIO  = DateTime.Now
                };

                conexion.PROYECTO.InsertOnSubmit(equi);              
                conexion.SubmitChanges();
                conexion.increm_ContadorIdProyecto(); 
                result = DialogResult.OK;
            }
            catch (Exception)
            {
              result = DialogResult.Cancel;
            }
            return result; 
        }
 
        internal List<USUARIO> modificadorUsu()
        {
            List<USUARIO> listusu = conexion.USUARIO.Where(x => x.ELIMINADO == 0).ToList<USUARIO>();
            return listusu;

        }

        internal List<USUARIO> buscaDatadelUsuario(string usuarionombre)
        {
            List<USUARIO> listusu = conexion.USUARIO.Where(x => x.NOMBRE==usuarionombre).ToList<USUARIO>();
            return listusu;
        }

        internal void listUuarios(DataGridView dg)
        {
            int i = 1;
            var consulta = from u in conexion.USUARIO
                           join e in conexion.EMPRESA on u.IDEMPRESA equals e.IDEMPRESA 
                           where u.ELIMINADO == 0
                           select new
                           {
                               u.IDUSUARIO,
                               u.NOMBRE,
                               u.CODIGO_RRHH,
                               u.USUARIO_WINDOWS,
                               u.USUARIO_DBS,
                               u.CORREO,
                               u.OFICINA,
                               u.DEPARTAMENTO,
                               u.TELEFONO,
                               u.ANEXO,
                               u.REPARADOR,
                               u.USUARIO_SIST,
                               u.PASSWORD_SIST,
                               u.RPM,
                               u.RPC,
                               u.NEXTEL,
                               u.CELULAR,
                               u.FECHAMODIFICACION,
                               e.NOMBREEMPRESA 
                           };
            dg.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj = new object[] {                                          
                                          c.IDUSUARIO,
                                          i,                                        
                                          c.NOMBRE,
                                          c.CODIGO_RRHH,
                                          c.USUARIO_WINDOWS,
                                          c.USUARIO_DBS,
                                          c.CORREO,
                                          c.OFICINA,
                                          c.DEPARTAMENTO,
                                          c.TELEFONO,
                                          c.ANEXO,
                                          c.REPARADOR,
                                          c.USUARIO_SIST,
                                          c.PASSWORD_SIST,
                                          c.RPM,
                                          c.RPC,
                                          c.NEXTEL,
                                          c.CELULAR,
                                          c.FECHAMODIFICACION.GetValueOrDefault(DateTime.MinValue)   ,
                                          c.NOMBREEMPRESA 
                                        };
                obj[18] = ((DateTime)obj[18]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[18]).ToShortDateString();//fecha de reg. salida
                dg.Rows.Add(obj);
                i++;
            } 
        }

        internal void actualizaUsuario(string idusu, string nomb, string codrh, string usuwind, string usudbs, string corr,
                                       string ofi, string depa, string telg, string anex, string ususist, string passsist, 
                                       string rm, string rc, string next, string cel, string empr)
        { 
            String idempresa = conexion.EMPRESA.Single(p => p.NOMBREEMPRESA == empr).IDEMPRESA ;
            USUARIO us = conexion.USUARIO.Single(x => x.IDUSUARIO == idusu && x.IDEMPRESA == idempresa); 
            us.NOMBRE = nomb;
            us.CODIGO_RRHH = codrh;
            us.USUARIO_WINDOWS = usuwind;
            us.USUARIO_DBS = usudbs;
            us.CORREO = corr;
            us.OFICINA = ofi;
            us.DEPARTAMENTO = depa ;
            us.TELEFONO = telg ;
            us.ANEXO = anex;        
            us.USUARIO_SIST = ususist;
            us.PASSWORD_SIST = passsist;
            us.RPM = rm ;
            us.RPC = rc;
            us.NEXTEL = next;
            us.CELULAR = cel;
            us.FECHAMODIFICACION = DateTime.Now;
            us.IDEMPRESA = idempresa;   
            conexion.SubmitChanges(); 
        }
    }
}
